part of "../time.dart";

/// 比如说计划添加每日的任务，根据当前时间与计划时间的差，在一段时间后执行设计好的函数
/// 它与当前最大的不同就是，无需scan，而是设置好定时来执行
class DailyTask {
  // 单例
  DailyTask._internal();
  static final _singleton = DailyTask._internal();
  factory DailyTask() => _singleton;

  /// 添加每日任务
  void addDailyTask(int hour, int minute, Function task) {
    DateTime now = DateTime.now();
    DateTime scheduledTime =
        DateTime(now.year, now.month, now.day, hour, minute);

    if (now.isAfter(scheduledTime)) {
      scheduledTime = scheduledTime.add(Duration(days: 1));
    }

    Timer(
      scheduledTime - now,
      () {
        task();
        Timer.periodic(Duration(days: 1), (Timer t) {
          task();
        });
      },
    );
  }
}
